/**
 * @title: BulbSwitchAlgorithm
 * @Author ChenYiXi
 * @Date: 2021-5-6 9:52
 */
public class BulbSwitchAlgorithm {

    /**
     * 初始时有 n 个灯泡处于关闭状态。
     * <p>
     * 对某个灯泡切换开关意味着：如果灯泡状态为关闭，那该灯泡就会被开启；而灯泡状态为开启，那该灯泡就会被关闭。
     * <p>
     * 第 1 轮，每个灯泡切换一次开关。即，打开所有的灯泡。
     * <p>
     * 第 2 轮，每两个灯泡切换一次开关。 即，每两个灯泡关闭一个。
     * <p>
     * 第 3 轮，每三个灯泡切换一次开关。
     * <p>
     * 第 i 轮，每 i 个灯泡切换一次开关。 而第 n 轮，你只切换最后一个灯泡的开关。
     * <p>
     * 找出 n 轮后有多少个亮着的灯泡。
     * <p>
     *  
     * <p>
     * 示例 1：
     * <p>
     * <p>
     * <p>
     * 输入：n = 3
     * 输出：1
     * 解释：
     * 初始时, 灯泡状态 [关闭, 关闭, 关闭].
     * 第一轮后, 灯泡状态 [开启, 开启, 开启].
     * 第二轮后, 灯泡状态 [开启, 关闭, 开启].
     * 第三轮后, 灯泡状态 [开启, 关闭, 关闭].
     * <p>
     * 你应该返回 1，因为只有一个灯泡还亮着。
     * 示例 2：
     * <p>
     * 输入：n = 0
     * 输出：0
     * 示例 3：
     * <p>
     * 输入：n = 1
     * 输出：1
     *  
     * <p>
     * 提示：
     * <p>
     * 0 <= n <= 109
     * <p>
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/bulb-switcher
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */

    public static void main(String[] args) {

        BulbSwitchAlgorithm decodeAlgorithm = new BulbSwitchAlgorithm();
        int bulbSwitch = decodeAlgorithm.bulbSwitch(19999);
        System.out.println("bulbSwitch：" + bulbSwitch);

    }

    public int bulbSwitch(int n) {
        int total = 0;
        int lastTotal = 0;
        int count = 0;
        for (int i = 1; i < Math.pow(10,9); i = i + 2) {
            total += i;
            count++;
            if (n <= total - 1 && n >= lastTotal) {
                return count - 1;
            }
            lastTotal = total;
        }

        return count;
    }


}
